import { defineConfig } from 'father';

/**
 * 获取 Father 配置
 * @param options 配置选项
 */
export const getFatherConfig = (options?: {
  platform?: 'browser' | 'node';
  umd?: boolean;
  extraBabelPlugins?: any[];
}) => {
  const { 
    platform = 'browser', 
    umd = false,
    extraBabelPlugins = []
  } = options || {};

  return defineConfig({
    // ESModule 输出
    esm: {
      output: 'dist/esm',
      transformer: 'esbuild',
      platform,
    },
    // CommonJS 输出
    cjs: {
      output: 'dist/cjs',
      transformer: 'esbuild',
      platform,
    },
    // UMD 输出（可选）
    umd: umd ? {
      output: 'dist/umd',
      name: 'MyComponents',
      sourcemap: true,
      platform,
      externals: {
        react: 'React',
        'react-dom': 'ReactDOM',
        antd: 'antd',
      },
    } : undefined,
    // 预打包配置
    prebundle: {
      deps: {},
      extraExternals: {
        'react-dom': 'ReactDOM',
      },
    },
    // 平台目标
    platform,
    // 额外的 Babel 插件
    extraBabelPlugins: [
      ...extraBabelPlugins,
      // 按需导入插件
      [
        'babel-plugin-import',
        {
          libraryName: 'antd',
          libraryDirectory: 'es',
          style: true,
        },
      ],
    ],
    // 源代码转换配置
    sourcemap: true,
    // 别名配置
    alias: {
      '@': './src',
    },
  });
};

/**
 * 浏览器组件包配置
 */
export const getBrowserConfig = () => getFatherConfig({
  platform: 'browser',
  extraBabelPlugins: [
    // 添加浏览器特定的 Babel 插件
  ],
});

/**
 * Node.js 工具包配置
 */
export const getNodeConfig = () => getFatherConfig({
  platform: 'node',
  umd: false, // Node.js 包通常不需要 UMD
});

/**
 * 完整 UMD 配置
 */
export const getUmdConfig = () => getFatherConfig({
  platform: 'browser',
  umd: true,
});